package application;
import com.google.common.collect.Lists;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.Module;
import com.google.inject.TypeLiteral;
import extensionpoints.ViewContribution;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.TilePane;
import javafx.stage.Stage;
import com.github.signed.microplugin.core.AllContributors;
import com.github.signed.microplugin.core.ApplicationContributionModule;
import java.util.List;
import java.util.ServiceLoader;
public class ModularJFx extends Application {
public static void main(String[] args) {
launch(args);
}
private static List<Module> allGuiceModules(){
List<Module> allModules = Lists.newArrayList();
ServiceLoader<ApplicationContributionModule> guiceModules = ServiceLoader.load(ApplicationContributionModule.class);
for (ApplicationContributionModule guiceModule : guiceModules) {
allModules.add(guiceModule);
}
return allModules;
}
private final Injector injector = Guice.createInjector(allGuiceModules());
@Override
public void start(Stage stage) throws Exception {
putSceneOn(stage);
stage.show();
}
private void putSceneOn(Stage stage) {
FlowPane pane = new FlowPane();
ViewContribution filterViewContribution = new ViewContribution() {
@Override
public void addTo(Pane pane) {
TilePane tilePane = new TilePane();
TextField seriesTextArea = new TextField();
seriesTextArea.promptTextProperty().setValue("series");
TextField seasonTextArea = new TextField();
seasonTextArea.promptTextProperty().setValue("season");
tilePane.getChildren().addAll(seriesTextArea, seasonTextArea);
pane.getChildren().add(tilePane);
//To change body of implemented methods use File | Settings | File Templates.
}
};
for (ViewContribution viewContribution : injector.getInstance(Key.get(new TypeLiteral<AllContributors<ViewContribution>>() { }))) {
viewContribution.addTo(pane);
}
filterViewContribution.addTo(pane);
stage.setScene(new Scene(pane));
}
}